<?php
declare (strict_types = 1);

namespace app\admin\controller;

use app\BaseController;
use think\facade\Db;
use think\facade\Request;
use think\facade\Route;
use think\facade\View;//单例设计模式
class Index  extends  BaseController
{
    public function index()
    {


//        ////【模版赋值】五种赋值和在模版输出的方法
//        // ①赋值标量(字符串、整型、浮点、布尔类型 不可再分的数据类型=》复合数据类型)到模版
       $str="zhuoxiang";
        View::assign('str',$str);
//        // ②赋值一维数组到模版 两种方式在模版输出  []  .
        $arr1=[24,23,24,'ksjd',"sjjj",123];
        View::assign("arr1",$arr1);
        $arr2=['name'=>'张三',"age"=>18,"sex"=>'女'];
        View::assign("person",$arr2);
//        // ③赋值二（多）维数组到模版 两种方式在模版输出  []  .
        $arr=[
            ['id'=>1,'name'=>'张三',"age"=>10,"sex"=>'男'],
            ['id'=>2,'name'=>'李四',"age"=>20,"sex"=>'女'],
            ['id'=>3,'name'=>'王无',"age"=>55,"sex"=>'男'],
            ['id'=>4,'name'=>'王五',"age"=>42,"sex"=>'女'],
            ['id'=>5,'name'=>'王二麻子',"age"=>18,"sex"=>'男'],
            ['id'=>6,'name'=>'赵六',"age"=>23,"sex"=>'女'],
        ];
       View::assign("persons",$arr);
//        // ④赋值对象到模版(对象的属性可以承载数据) 两种方式在模版输出  ->  :
       $obj = new \stdClass();
       $obj->name = 'zhuoxiang';
       $obj->nicname = "卓象";
       View::assign('obj',$obj);
       $time=time();
        View::assign('time',$time);
        $num=1;
        View::assign("num",$num);
        $a=10;
        $b=10;
        View::assign("a",$a);
        View::assign("b",$b);
        View::assign([
            'empty'=>"<b>暂无数据</b>"
        ]);

//         ⑤批量赋值 可以将第一维是关联数组的数组 采用批量复制的形式赋值到模版，键名为变量名，键值为对应的变量值
//
       View::assign($arr2);
//        [渲染模板]
//        模板跟控制器和方法只是一个默认的对应关系,这个对应关系(规则) 仅仅是为了找模板方便而设定的规则而已
//        按照模板对应关系的控制器不一定存在.
//        参数1; 渲染的模板 默认不写是该模板控制器的方法对应的模板
//                         模板表达式[应用@][控制器/][方法]  从左向右依次可以省略
//
//                    支持相对路径找到模板,相对于入口文件
//
//
//        return View::fetch("admin/@Goods/index");
//        return View::fetch("../app/admin/view/Goods/index.html");

        return View::fetch();

    }
    public function frm()
    {
        return View::fetch();
    }

    public function db()
    {

        $rt=Db::table('ecm_goods')
             ->field('goods_id,goods_name,left(goods_name,4) as goods_title')
             ->field(['cate_id','price',"FROM_UNIXTIME(add_time,'%Y-%m-%d %H:%i:%s' )"=>'add_time'])
             ->field(["if((if_show=1),'上架','下架')"=>'if_show_msg'])
             ->field(["if((recommended=1),'推荐','不推荐')"=>'recommended_msg'])
//                ->field(true)
//                ->withoutField(['description'])
                ->field('1 as new_name')
//            ->order('price','desc')
//            ->order('add_time desc')
//            ->order(['add_time'=>'desc','goods_id'])
              ->orderRaw('rand()')
             ->find();
        echo "<pre>";
        print_r( $rt);
        echo "</pre>";


//        if($rt->isEmpty()){
//           var_dump($rt->isEmpty());
//       }else{
//            echo "<pre>";
//            print_r($rt->toArray());
//          echo "</pre>";
//       }
//        $sql="select * from ecm_users";
//        $re =Db::query($sql);
//        $rt = Db::table('ecm_goods')
//                ->alias('g')
//               ->where('goods_id','>','1')
//            ->select();
//        $rt = Db::table('ecm_goods')
//               ->where('goods_id','<>',5)
//              ->select();
//        $rt1 = Db::table('ecm_goods')
//            ->where('goods_id','>=',5)
//            ->select();
//        echo "<pre>";
//        print_r($rt1->toArray());
//        echo "</pre>";
//        if($rt->isEmpty()){
//            var_dump($rt->isEmpty());
//        }else{
//            echo "<pre>";
//            print_r($rt->toArray());
//            echo "</pre>";
//        }
//        $rt2 = Db::table('ecm_goods')
//            ->where('goods_id','=',5)
//            ->select();
//        echo "<pre>";
//        print_r($rt2->toArray());
//        echo "</pre>";
//        $rt3 = Db::table('ecm_goods')
//            ->where('goods_name','like','%杰记%')
//            ->select();
//        echo "<pre>";
//        print_r($rt3->toArray());
//        echo "</pre>";

    }
   public function test()

   {
       echo Route::buildUrl();
       echo "<br>";
       echo Route::buildUrl('index');
       echo "<br>";
       echo Route::buildUrl('index/Goods/index',['name'=>'acd','id'=>'1','aid'=>'2'])
                 ->suffix('jsp')
                 ->domain ('www.qq.com')
                 ->root("");
       echo "<br>";
       echo Route::buildUrl('index',['name'=>'张三']);
       echo "<br>";
       echo urlencode('李四#');
       echo "<br>";
       echo urldecode('%E6%9D%8E%E5%9B%9B%23');
       //【请求】
       // Request::变量类型方法('[变量名][/变量修饰符]'[,'默认值'][,'过滤方法'])
       // param	获取当前请求的变量  pathinfo(/控制器/方法/参数名/参数值/参数名/参数值...) + POST + GET
       //          parameter 参数
       // get	    获取 $_GET 变量    url中的?方式传递的参数
       // post	    获取 $_POST 变量   接收POST表单提交的参数
       // 变量名：接受变量的名字，默认不写接收当前请求类型全部参数
       // 变量修饰符：对变量的强制类型转换；TP5版本针对数组类型接参必须指明类型为数组；TP6不在强制要求；
       // 修饰符	作用
       // s	    强制转换为字符串类型【默认，强制转换为字符串类型时可以不写/s】
       // d	    强制转换为整型类型[/d]
       // b	    强制转换为布尔类型
       // a	    强制转换为数组类型【数组/a】
       // f	    强制转换为浮点类型


       //获取部分变量:指定接收部分变量,排除指定的部分变量:第二个参数为针对的请求放式(类型),不写针对get+post
       //Request::only(['id','name'], 'post');
       //Request::except(['id','name'], 'post');

//       echo "<pre>";
//       print_r(Request::only(['hobby'], 'post'));
//       echo "</pre>";
//       echo "<pre>";
//       print_r(Request::except(['hobby'], 'post'));
//       echo "</pre>";
       //判断是否被赋值(被设置),一般在项目中没有什么使用价值
       //Request::has('id','get');
//      var_dump(Request::has('id','get'));
      //助手函数(TP框架提供的一个福利) 针对所有的类的调用,都封装了一个助手函数来对应:(建议在模板中使用)
       //缺点: 比原有的类的方式调用执行效率低
       //优点: 不需要引入命名空间
       //Request::input
       //input('请求类型.变量名')
       //判断变量是否被赋值(被设置) input('?hobby');
//       echo "<pre>";
//       print_r(input('post.hoppy','321',"trim,htmlspecialchars,strip_tags"));
//       echo "</pre>";
//
//       echo "<pre>";
//       print_r(input('post.'));
//       echo "</pre>";

       //过滤方法:实质运行了一个过滤函数(仅有一个参数的函数) (只要是函数就可以) (多个过滤函数使用逗号分割,从左向右依次执行)
       // 作用:避免XSS跨站脚本攻击以及SQL注入 的攻击手段
       //1.trim:去掉两端空格
//       echo "<br>";
//       var_dump(Request::post('username','123',"trim"));
//       echo "<br>";
       //2.htmlspecialchars:转义常见的五个字符(& ' " < >) html special chars
       // &=> &amp '=>' "=>&quot < => &lt  > => &gt
//       echo "<br>";
//       var_dump(Request::post('username','123',"trim,htmlspecialchars"));
//       echo "<br>";
       //3.strip_tags:过滤掉(去除掉) HTML PHP NULL 的标签:
       //       var_dump(Request::post('username','123',"trim,strip_tags"));
//       echo "<br>";
       //4.md5 strtolower strtoupper 这种类似的一个参数的函数也都可以使用,但不常用,具体情况具体分析
       //echo "<br>";
//       var_dump(Request::post('username','123',"md5,strtolower"));
//       echo "<hr>";

//       echo "<hr>";
//       var_dump(Request::post('username','123'));


//       var_dump(Request::post('username','123',"trim,htmlspecialchars,strip_tags"));//一般写法
//
//       //默认值:当无法接到参数时或者没有传参时(接到的参数值为null时) , 会自动使用默认值来当做参数的值;
         // 第一类 : param (TP自定义的接参请求类型)的接参数没有赋值,那么就会使用默认值来赋值
         //          [总结一句:只要参数没有赋值,那么就会使用默认值来赋值:]
         //参数名存在时:传值时会收到传递到值:没有传值时默认会得到null
         //参数名不在时:默认会得到[null]
         //第二类:get/post (HTTP 官方协议所规定的标准的请求类型)
         //      [总结一句:参数在传参列表不存在时才走默认值,否则参数存在即使不赋值一个空字符串:]
         // 参数名存在时:传值时会接收到传递的值:没有传值时默认会得到空[字符串]=>这种方式不会使用默认值
         // 参数名不在时:默认会得到[null]
//       var_dump(Request::param('name','123'));
//       echo "<br>";
//       var_dump(Request::get('name','123'));
//       echo "<br>";
//       var_dump(Request::post('username','123'));
//
//       echo "<hr>";
//
//       echo Request::param('name');
//       $hobby= Request::param('hobby/a');
//       echo "<pre>";
//       print_r($hobby);
//       echo "</pre>";
//
//      $sex = Request::param('sex/b');
//     var_dump($sex);
//
//
//       echo "<pre>";
//       print_r($_GET);
//       echo "</pre>";
//       echo "<pre>";
//       print_r(Request::param());
//       echo "</pre>";
//
//       echo "<pre>";
//       print_r(Request::post());
//       echo "</pre>";
//
//       echo "<br>";
//       echo Request::url();
//       echo "<br>";
//       echo Request::pathinfo();
   }

}
